package fr.charlott.view;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import fr.charlott.business.dto.HotesseDTO;
import fr.charlott.business.service.HotesseService;
import fr.charlott.tools.exceptions.FunctionalException;

@Component("listeHotesseControler")
@Scope("view")
public class ListeHotesseControler extends CharlottControler {

    private static final long serialVersionUID = 2465999191538831539L;

    private List<HotesseDTO> hotesses = new ArrayList<HotesseDTO>();

    private HotesseDTO selectedHotesse;

    private HotesseService hotesseService;

    public ListeHotesseControler() {
        super();
    }

    @Autowired(required = true)
    public ListeHotesseControler(HotesseService hotesseService) {
        this();
        this.hotesseService = hotesseService;
        // Initialisation des différentes Hotesses
        hotesses = hotesseService.chargerToutesLesHotesses();
    }

    // actions

    public String modifierHotesse() {
        // Mettre la Hotesse selectionnee dans la session pour le passage par
        // redirection
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        externalContext.getSessionMap().put(NouvelleHotesseControler.EDITED_HOTESSE, selectedHotesse);

        return "nouvelleHotesse";
    }

    public String supprimerHotesse() throws FunctionalException {
        try {
            hotesseService.supprimerHotesse(selectedHotesse);
            return "listeHotesses";
        } catch (FunctionalException e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Suppression : ", e.getMessage()));
            return null;
        }
    }

    // getters - setters

    public List<HotesseDTO> getHotesses() {
        return hotesses;
    }

    public HotesseDTO getSelectedHotesse() {
        return selectedHotesse;
    }

    public void setSelectedHotesse(HotesseDTO selectedHotesse) {
        this.selectedHotesse = selectedHotesse;
    }
}
